<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>数组的方法</title>
  </head>
  <body>
    <script>
      // var nums =[1,2,3,4,5,6,7];
      /*
       * push()
       * 	- 该方法可以向数组的末尾添加一个或多个元素，并返回数组的新的长度
       * 	- 可以将要添加的元素作为方法的参数传递，
       * 		这样这些元素将会自动添加到数组的末尾
       * 	- 该方法会将数组新的长度作为返回值返回
       */

      //  var res1=  nums.push('A','B','C');
      //  nums.forEach(function (value) {
      //      console.log(value)
      //    })

      //    console.log(res1);

      //    console.log("------")

      //    /*
      //  * pop()
      //  * 	- 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
      //  */

      //  var res2 =nums.pop();
      //  console.log(res2);

      //  console.log("------")

      //  /*
      //  * unshift()
      //  * 	- 向数组开头添加一个或多个元素，并返回新的数组长度
      //  * 	- 向前边插入元素以后，其他的元素索引会依次调整
      //  */

      //  nums.unshift("O","P","W");

      //  nums.forEach(function (value) {
      //      console.log(value)
      //    })

      //    console.log("------")

      //    	/*
      //  * shift()
      //  * 	- 可以删除数组的第一个元素，并将被删除的元素作为返回值返回
      //  */

      //  var res5 =nums.shift();
      //  console.log(res5);

      //  	/*
      //  * slice()
      //  * 	- 可以用来从数组提取指定元素
      //  * 	- 该方法不会改变元素数组，而是将截取到的元素封装到一个新数组中返回
      //  * 	- 参数：
      //  * 		1.截取开始的位置的索引,包含开始索引
      //  * 		2.截取结束的位置的索引,不包含结束索引
      //  * 			- 第二个参数可以省略不写,此时会截取从开始索引往后的所有元素
      //  * 		- 索引可以传递一个负值，如果传递一个负值，则从后往前计算
      //  * 			-1 倒数第一个
      //  * 			-2 倒数第二个
      //  */

      //  var nums = [1,2,3,4,5,6,7,8,9];

      //  var nums1 =nums.slice(0,4);
      //  console.log(nums);
      //  console.log(nums1);

      /*
       * splice() 删除  添加  替换  (任意位置)
       * 	- 可以用于删除数组中的指定元素
       * 	- 使用splice()会影响到原数组，会将指定元素从原数组中删除
       * 		并将被删除的元素作为返回值返回
       * 	- 参数：
       * 		第一个，表示开始位置的索引
       * 		第二个，表示删除的数量
       * 		第三个及以后。。
       * 			可以传递一些新的元素，这些元素将会自动插入到开始位置索引前边
       *
       */

      arr = ["孙悟空", "猪八戒", "沙和尚", "唐僧", "白骨精"];
      var result = arr.splice(3, 0, "牛魔王", "铁扇公主", "红孩儿");

      console.log(arr);
      //console.log(result);

      /*
       * concat()可以连接两个或多个数组，并将新的数组返回
       * 	- 该方法不会对原数组产生影响
       */

      var nums1 = [1, 2, 3, 4, 5];
      var nums2 = ["A", "B", "C"];
      var resArr = nums1.concat(nums2);
      console.log(resArr);

      /*
       * join()
       * 	- 该方法可以将  数组转换为一个字符串
       * 	- 该方法不会对原数组产生影响，而是将转换后的字符串作为结果返回
       * 	- 在join()中可以指定一个字符串作为参数，这个字符串将会成为数组中元素的连接符
       * 		如果不指定连接符，则默认使用,作为连接符
       */

        var str = nums1.join("-");
        console.log(str);


        /*
			 * reverse()
			 * 	- 该方法用来反转数组（前边的去后边，后边的去前边）
			 * 	- 该方法会直接修改原数组
			 */

       console.log(nums1.reverse());


       /*
			 * sort()
			 * 	- 可以用来对数组中的元素进行排序
			 * 	- 也会影响原数组，默认会按照Unicode编码进行排序

        浏览器会根据回调函数的返回值来决定元素的顺序，
			 * 		如果返回一个大于0的值，则元素会交换位置
			 * 		如果返回一个小于0的值，则元素位置不变
			 * 		如果返回一个0，则认为两个元素相等，也不交换位置
			 * 
			 * 	- 如果需要升序排列，则返回 a-b
			 * 		如果需要降序排列，则返回b-a
			 */

        nums1.sort(function(a,b){
          return a-b;
        })

        console.log(nums1);

        
    </script>
  </body>
</html>
